/**
 * 
 * gislin
 * 2016年7月2日
 */
package io.chance.receiverlei.db.redis;


import io.chance.receiverlei.db.RedisDbExecute;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * @author gislin
 * 2016年7月2日
 */
public class ChannelService {

	private static ChannelService _instance;
	SimpleDateFormat defaultSf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	
	private ChannelService(){
		
	}
	
	public static ChannelService getInstance(){
		if(_instance == null){
			_instance = new ChannelService();
		}
		return _instance;
	}
	
	/**
	 * 根据设备编号获取channelid
	 * gislin
	 * 2016年3月24日
	 * @param mn
	 * @return
	 */
	public String getChannelId(String mn){
		String channelId = RedisDbExecute.getString("stationInfo:"+mn+":deviceInfo:channelId");
		return channelId;
	}
	/**
	 * 获取所有的channelid
	 * gislin
	 * 2016年3月24日
	 * @return
	 */
	public List<String> getChannelid(){
		Set<String> channelidSet = RedisDbExecute.queryKeys("channelInfo:*:mn");
		List<String> channelids = new ArrayList<String>();
		for(String key : channelidSet){
			String channelid = key.split(":")[1];
			channelids.add(channelid);
		}
		return channelids;
	}
	
	/**
	 * 移除channelid
	 * gislin
	 * 2016年3月24日
	 * @param channelId
	 */
	public void deleteChannel(String channelId){		
		RedisDbExecute.deleteKeys("channelInfo:"+channelId+"*");
	}
	
	/**
	 * 移除设备
	 * gislin
	 * 2016年3月25日
	 * @param mn
	 */
	public void deleteDevice(String mn){
		RedisDbExecute.deleteKeys("stationInfo:"+mn+":deviceInfo:channelId");
	}
	
	/**
	 * 更新设备最后在线时间
	 * gislin
	 * 2016年7月2日
	 * @param mn
	 */
	public void setDeviceActivityTime(String mn){
		
		RedisDbExecute.setString("stationInfo:"+mn+":deviceInfo:activityTime",defaultSf.format(new Date()));
	}
	
	/**
	 * 获取设备最后活动时间
	 * gislin
	 * 2016年3月24日
	 * @param mn
	 * @return
	 */
	public Date getDeviceActivityTime(String mn){
		Date date = RedisDbExecute.getDate("stationInfo:"+mn+":deviceInfo:activityTime", null);
		return date;
	}
	
	/**
	 * 在redis中注册设备和channel信息
	 * gislin
	 * 2016年3月24日
	 * @param mn
	 * @param channelId
	 */
	public void addDevice(String mn,String channelId){
		RedisDbExecute.setString("stationInfo:"+mn+":deviceInfo:channelId", channelId);
		RedisDbExecute.setString("channelInfo:"+channelId+":mn",mn);
	}
	
	/**
	 * 获取所有设备编号
	 * gislin
	 * 2016年3月24日
	 * @return
	 */
	public List<String> getDevices(){
		Set<String> devices = RedisDbExecute.queryKeys("stationInfo:*:deviceInfo:channelId");
		List<String> mns = new ArrayList<String>();
		for(String key : devices){
			String mn = key.split(":")[1];
			mns.add(mn);
		}
		return mns;
	}
	
	/**
	 * 跟channelid获取设备编号
	 * gislin
	 * 2016年3月24日
	 * @param channelId
	 * @return
	 */
	public String getMn(String channelId){
		String mn = RedisDbExecute.getString("channelInfo:"+channelId+":mn");
		return mn;
	}
	
}
